package com.tledu.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * @author cyrus
 */
@Aspect
@Component
public class MyAspect {

    @Pointcut("execution(int com.tledu.service.IUserService.update(com.tledu.domain.User))")
    private void pointCut() {
    }

    @Pointcut("execution(int com.tledu.service.impl.UserServiceImpl.update(com.tledu.domain.User))")
    private void pointCut2() {
    }

    // 通配符的切入点 *
    // 匹配com.tledu下所有包里的的IUser开头的接口下的select开头的方法，方法只能有一个任意格式的参数，可以返回任意值
//    @Pointcut("execution(* com.tledu.*.IUser*.select*(*,*))")
    @Pointcut("execution(* com.tledu.*.IUser*.select*(*))")
    private void wildcard() {
    }

    // 通配符 .. 代表com下的所有的包，包括多级的, 放在参数的位置的时候，代表任意个参数
    // 匹配 com包下的任意以IUser开头的类/接口，下的select开头的方法，方法允许任意个参数，返回任意值
    @Pointcut("execution(* com..*.IUser*.select*(..))")
//    @Pointcut("execution(* com.tledu.service.I*.*(..))")
    private void wildcard2() {
    }

    /**
     * 通知：增强的功能x`x`
     */
    @Before("wildcard2()")
    public void before() {
        // 在方法执行之前，打印毫秒数
        System.out.println("当前的毫秒数："+System.currentTimeMillis());
    }
}
